import { get, post, postWithQueryParams } from "@/api/request";

/**
 * 首页用户关联菜单 控制器 / 首页用户关联菜单 控制器保存首页用户关联菜单
 * @param {object} data
 * @param {array<UserPermissions创建传输实体>} data.dtos dtos
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<UserPermissions页面展示实体>}
 */
export function userPermissionsAdd(data, config) {
  return post("/userPermissions/add", data, config);
}

/**
 * 首页用户关联菜单 控制器 / 首页用户关联菜单 控制器删除首页用户关联菜单
 * @param {object} params
 * @param {object} data
 * @param {string} params.id 首页用户关联菜单ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<UserPermissions页面展示实体>}
 */
export function userPermissionsDelete(params, data, config) {
  return postWithQueryParams("/userPermissions/delete", params, data, config);
}

/**
 * 首页用户关联菜单 控制器 / 首页用户关联菜单 控制器查询首页用户关联菜单详情
 * @param {object} params
 * @param {string} params.id 首页用户关联菜单ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<UserPermissions页面展示实体>}
 */
export function userPermissionsDetail(params, config) {
  return get("/userPermissions/detail", params, config);
}

/**
 * 首页用户关联菜单 控制器 / 首页用户关联菜单 控制器分页查询首页用户关联菜单
 * @param {object} data
 * @param {number} [data.id] 主键
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {number} [data.permissionsId] 菜单id
 * @param {number} [data.start] 查询记录起始下标
 * @param {number} [data.userId] 用户id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<UserPermissions页面展示实体>>}
 */
export function userPermissionsList(data, config) {
  return post("/userPermissions/list", data, config);
}

/**
 * 首页用户关联菜单 控制器 / 首页用户关联菜单 控制器更新首页用户关联菜单
 * @param {object} data
 * @param {string} [data.createTime] 创建时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.createUser] 创建用户
 * @param {number} [data.delFlag] 是否已删除(0否；1是)
 * @param {number} [data.id] 主键
 * @param {number} [data.permissionsId] 菜单id
 * @param {number} [data.sort] 排序
 * @param {string} [data.updateTime] 更新时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.updateUser] 更新用户
 * @param {number} [data.userId] 用户id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<UserPermissions页面展示实体>}
 */
export function userPermissionsUpdate(data, config) {
  return post("/userPermissions/update", data, config);
}

/**
 * @template T
 * @typedef {Object} 分页返回实体
 * @property {T[]} content - 内容
 * @property {number} elementsNo
 * @property {number} limit
 * @property {number} number
 * @property {number} totalElements
 * @property {number} totalPages
 * @description 分页返回实体
 */

/**
 * @typedef {object} UserPermissions创建传输实体 首页用户关联菜单创建传输实体
 * @property {number} permissionsId 菜单id
 * @property {number} sort 排序
 * @description 首页用户关联菜单创建传输实体
 */

/**
 * @typedef {object} UserPermissions页面展示实体 首页用户关联菜单页面展示实体
 * @property {string} attUrl 图片url
 * @property {string} btnIdentifying 按钮标识
 * @property {boolean} canDelete 是否拥有删除权限
 * @property {boolean} canEdit 是否拥有编辑权限
 * @property {string} code 权限编码
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {string} createUserDeptName 创建用户所属部门
 * @property {string} createUserRealName 创建用户真实姓名
 * @property {number} delFlag 是否已删除(0否；1是)
 * @property {string} highlightUrl 高亮地址
 * @property {string} icon 菜单图标
 * @property {number} id 主键
 * @property {boolean} isBreadcrumbShow 是否显示在面包屑中（false不显示；true显示）
 * @property {boolean} isIndexShow 是否在首页显示
 * @property {boolean} isNavbarShow 是否显示在左侧导航栏中（false不显示；true显示）
 * @property {string} name 权限名称
 * @property {number} orderValue 排序值
 * @property {string} parameters 路由参数
 * @property {string} parentId 上级编码
 * @property {string} parentUrl 父路由地址
 * @property {number} permissionsId 菜单id
 * @property {string} redirectUrl 重定向地址
 * @property {number} sort 排序
 * @property {string} status 菜单状态 可选值: DISABLE, ENABLE
 * @property {string} updateTime 更新时间
 * @property {string} updateUser 更新用户
 * @property {string} url 路由地址
 * @property {number} userId 用户id
 * @description 首页用户关联菜单页面展示实体
 */
